home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 140 / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan).7z / Gekkan Dennou Club - 2000.1 Vol. 140 (Japan) (Track 1).bin / tools / dshell / dsh333bs.lzh / fontsub.s < prev    next >
Text File  |  1999-08-10  |  3KB  |  147 lines

  1. *****************************************************************
  2. *    DSHELL v3.3x 16ドットフォント切り替え部            *
  3. *                Copyright 1999 Toshiyuki Murata    *
  4. *****************************************************************
  5.         .cpu    68000
  6.         .include    doscall.mac
  7.         .include    iocscall.mac
  8. *
  9. .ifndef    _FNTADR
  10. _FNTADR    equ    $16
  11. .endif
  12. *
  13.         .xdef    _setFont16
  14.         .xdef    _getFont16
  15.         .xdef    _setHanFont16
  16.  
  17. *
  18. *    16ドットフォントを切り替える
  19. *
  20. *    void setFont16(FNTADR_TABLE *table);
  21. *
  22. *    table:    区 (0=半角) ごとの文字パターンアドレスのテーブル
  23. *        NULL ならIOCS FNTADR をリセット
  24. *
  25. _setFont16:
  26.         move.l    4(sp),d0
  27.         beq    resetFont16
  28.         movea.l    d0,a1
  29.         move.l    (a1)+,d1
  30.         moveq.l    #8,d2
  31.         IOCS    $38
  32.         lea.l    font16_16(pc),a0
  33.         move.l    a1,(a0)+
  34.         tst.l    (a0)
  35.         bne    @f
  36.         lea.l    dFNTADR(pc),a1
  37.         move.w    #$100+_FNTADR,d1
  38.         IOCS    _B_INTVCS
  39.         move.l    d0,(a0)
  40. @@:        rts
  41.  
  42. resetFont16:    lea.l    orgFNTADR(pc),a0
  43.         move.l    (a0),d0
  44.         beq    @f
  45.         movea.l    d0,a1
  46.         move.w    #$100+_FNTADR,d1
  47.         IOCS    _B_INTVCS
  48.         clr.l    (a0)
  49. @@:        rts
  50.  
  51. *
  52. *    16フォントテーブルの取得
  53. *
  54. *    void getFont16_16(FNTADR_TABLE *table);
  55. *
  56. *    table:    区 (0=半角) ごとの文字パターンアドレスのテーブル
  57. *
  58. _getFont16:
  59.         move.l    d3,a1
  60.         move.l    d4,a2    *{
  61.         movea.l    4(sp),a0
  62.         moveq.l    #(8<<1)+1,d2
  63.         ror.l    #1,d2
  64.         IOCS    $38
  65.         move.l    d0,(a0)+
  66.         move.w    #$2121,d3
  67.         moveq.l    #$7f-$21-1,d4
  68. getFontLoop:    move.w    d3,d1
  69.         moveq.l    #8,d2
  70.         IOCS    _FNTADR
  71.         move.l    d0,(a0)+
  72.         addi.w    #$100,d3
  73.         dbra    d4,getFontLoop
  74.         move.l    a2,d4    *}
  75.         move.l    a1,d3
  76.         rts
  77.  
  78. *
  79. *    16ドット半角フォントを切り替える
  80. *
  81. *    void setHanFont16(void *pat);
  82. *
  83. _setHanFont16:
  84.         move.l    4(sp),d1
  85.         moveq.l    #8,d2
  86.         IOCS    $38
  87.         rts
  88.  
  89. *
  90. *    IOCS FNTADR
  91. *
  92. chain:        move.l    orgFNTADR(pc),-(sp)
  93.         rts
  94. *
  95. dFNTADR:
  96.         move.w    d2,d0
  97.         beq    @f
  98.         subq.w    #8,d0
  99.         bne    chain
  100. @@:        cmpi.w    #$8140,d1
  101.         bcs    chain
  102.         cmpi.w    #$f000,d1
  103.         bcc    chain
  104.         move.b    d1,d0
  105.         lsr.w    #5-2,d0
  106.         andi.b    #-4,d0
  107.         move.l    lowByteTable(pc,d0.w),d0
  108.         btst.l    d1,d0
  109.         beq    chain
  110.         tst.b    d1
  111.         bpl    @f
  112.         subq.b    #1,d1
  113. @@:        subi.b    #$40,d1
  114.         move.w    d1,d0
  115.         subi.w    #$8100,d0
  116.         lsr.w    #8,d0
  117.         mulu.w    #188,d0
  118.         moveq.l    #0,d2
  119.         move.b    d1,d2
  120.         add.l    d0,d2
  121.         divu.w    #94,d2
  122.         add.l    d2,d2
  123.         add.l    d2,d2
  124.         movea.l    font16_16(pc),a0
  125.         move.l    (a0,d2.w),d0
  126.         swap.w    d2
  127.         lsl.w    #5-2,d2
  128.         ext.l    d2
  129.         add.l    d2,d0
  130.         moveq.l    #2-1,d1
  131.         moveq.l    #16-1,d2
  132.         rts
  133. *
  134. lowByteTable:    .dc.l    %00000000_00000000_00000000_00000000    *(LSB)00-1f(MSB)
  135.         .dc.l    %00000000_00000000_00000000_00000000    *20-3f
  136.         .dc.l    %11111111_11111111_11111111_11111111    *40-5f
  137.         .dc.l    %01111111_11111111_11111111_11111111    *60-7f
  138.         .dc.l    %11111111_11111111_11111111_11111111    *80-9f
  139.         .dc.l    %11111111_11111111_11111111_11111111    *a0-bf
  140.         .dc.l    %11111111_11111111_11111111_11111111    *c0-df
  141.         .dc.l    %00011111_11111111_11111111_11111111    *e0-ff
  142. *
  143. font16_16:    .ds.l    1    *┐
  144. orgFNTADR:    .ds.l    1    *┘
  145.  
  146.         .end
  147.